package com.summer.data.type;

/**
 * @author 345480567@qq.com
 */

import java.util.ArrayList;
import java.util.List;

/**
 * @author 345480567@qq.com
 */
public class Linker <T, R> {

    private List<T> tList = new ArrayList<>();

    private List<R> rList = new ArrayList<>();

    public Linker<T, R> add(T t) {
        tList.add(t);
        return this;
    }

    public Linker<T, R> addR(R r) {
        rList.add(r);
        return this;
    }

//    public Linker<T, R> add(R r, T t) {
//        rList.add(r);
//        tList.add(t);
//        return this;
//    }

    public T last() {
        if (tList.size() > 0) {
            return tList.get(tList.size()-1);
        } else {
            return null;
        }
    }

    public R lastR() {
        if (rList.size() > 0) {
            return rList.get(rList.size()-1);
        } else {
            return null;
        }
    }

    public int size() {
        int size = tList.size();
        return size;
    }

    public void walk(Walker<T, R> walker) {
        for(int i=0; i<tList.size(); i++) {
            T t = tList.get(i);
            walker.onEntity(t);
            if (i< rList.size()) {
                R r = rList.get(i);
                walker.onRelation(r);
            }
        }
    }

    public interface Walker<T, R> {
        void onEntity(T t);
        void onRelation(R r);
    }
}
